package memory.memoryCopy;

/**
 *@Author wsyjiamian@163.com
 *@Description
 *@Date 2020/8/16 13:54
 */
public class ParamerTransmit {

    /**
     * 交换指定数组中指定下标的值
     * @param arr
     * @param index0
     * @param index1
     */
    public void swap(int[] arr , int index0 , int index1){
        System.out.print("打印被传递过来的形参：");
        for(int i : arr){
            System.out.print(i+" ");
        }

        System.out.println();

        int temp = arr[index0];
        arr[index0] = arr[index1];
        arr[index1] = temp;

        System.out.print("打印对形参执行交换后：");
        for(int i : arr){
            System.out.print(i+" ");
        }
        System.out.println();
    }

    /**
     * 将引用变量置为null
     */
    public void change(int[] arr){
        arr = null;
    }

    public static void main(String[] args) {
        ParamerTransmit pt = new ParamerTransmit();

        int[] arr = new int[]{1,2};
        pt.swap(arr , 0 , 1);

        System.out.print("打印调用swap后的数据：");
        for(int i : arr){
            System.out.print(i+" ");
        }
        System.out.println();

        /**
         * 执行了代码后，可以看到通过对传递的形参所指向的对象
         * 进行操作的同时，原数据发生了改变，表示形参所指向的对象
         * 与原引用变量所指向的对象相同
         */

        System.out.println("调用change方法前arr地址: "+arr);

        /**
         *在change中置为null，对原始arr无影响，表示执行了一次浅拷贝，
         *将原始变量的引用变量做了一次拷贝
         */
        pt.change(arr);
        System.out.println("调用change方法后arr地址: "+arr);

    }
}


